package com.wanwanbear.www.netty;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;

import java.net.InetAddress;

/**
 * Created by asd47 on 2017/6/17.
 */
public class DiscardServerHandler extends SimpleChannelInboundHandler<String> {
    //messageReceived方法获取客户端发送的信息
    protected void messageReceived(ChannelHandlerContext channelHandlerContext, String s) throws Exception {
        // 收到客户端的消息
        String toConsole = channelHandlerContext.channel().remoteAddress() + " said: " + s;
        System.out.println(toConsole);
        // 分发消息给客户端
        channelHandlerContext.writeAndFlush(s + " received!\r\n");
    }
    // 当netty发生异常
    // 执行因于Netty的I/O异常或一个处理器实现的内部异常。
    // 多数情况下，捕捉到的异常应当被记录下来，并在这个方法中关闭这个channel通道。
    // 当然处理这种异常情况的方法实现可能因你的实际需求而有所不同，例如，在关闭这个连接之前你可能会发送一个包含了错误码的响应消息。
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        super.exceptionCaught(ctx, cause);
        cause.printStackTrace();
        ctx.close();
    }
    /**
     * 本方法channelActive在channel被accept时候（即连接建立的时候被触发）
     * @throws Exception
     */
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        String toConsole = ctx.channel().remoteAddress() + " active!";
        System.out.println(toConsole);
        //InetAddress获取网络目标地址
        ctx.writeAndFlush("Welcome to " + InetAddress.getLocalHost().getHostName() + " service!\r\n");
        System.out.println("Welcome to " + InetAddress.getLocalHost().getHostName() + " service!\r\n");
        super.channelActive(ctx);
    }
}
